﻿/*************************************************************************
* 计算机名：AA-FA-05
* CLR 版本：4.0.30319.42000
* 命名空间: Unity
* 类    名：FileHelper
* 当 前 域：HYRC
* 创 建 人：dailuyu
* 创建时间：2021/6/17 10:29:52
* 描    述：
*  V0.01 2021 初版
*
*  Copyright (c) 2021 aatsr Corporation. All rights reserved.
*  ┌──────────────────────────────────┐
*  │　此技术信息为本公司机密信息，未经本公司书面同意禁止向第三方披露．　│
*  └──────────────────────────────────┘
***************************************************************************/

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Security.Cryptography;
using System.Text;

namespace Unity
{
    /// <summary>
    /// 文件帮助类
    /// </summary>
    public class FileHelper
    {
        /// <summary>
        /// 打开文件管理选中指定文件
        /// </summary>
        public static void SelectFile(string sFileFullName)
        {
            if (sFileFullName.Contains("//"))
            {
                sFileFullName = sFileFullName.Replace("//", "\\");
            }
            sFileFullName = sFileFullName.Replace("\\\\", "\\");
            ProcessStartInfo psi = new ProcessStartInfo("Explorer.exe");
            psi.Arguments = " /select," + sFileFullName;
            Process.Start(psi);
        }
        /// <summary>
        /// 删除文件数据
        /// </summary>
        /// <param name="path">文件地址</param>
        public static bool DeleteFile(string path)
        {
            string fileDirectory = System.IO.Path.GetDirectoryName(path);
            bool flag = false;
            if (File.Exists(path))
            {
                //FileInfo fileInfo = new FileInfo(Path.GetFullPath(path));
                //fileInfo.Attributes = FileAttributes.Normal;
                //fileInfo.Delete();
                File.Delete(Path.GetFullPath(path));
                flag = true;
            }
            if (flag)
            {
                if (Directory.Exists(fileDirectory)) //判断是否存在   
                {
                    if (Directory.GetFileSystemEntries(fileDirectory).ToList().Count == 0)
                    {
                        Directory.Delete(fileDirectory);
                    }
                }
            }
            return flag;
        }

        public static void WipeFile(string filename, int timesToWrite)
        {
            try
            {
                if (File.Exists(filename))
                {
                    //设置文件的属性为正常，这是为了防止文件是只读
                    File.SetAttributes(filename, FileAttributes.Normal);
                    //计算扇区数目
                    double sectors = Math.Ceiling(new FileInfo(filename).Length / 512.0);
                    // 创建一个同样大小的虚拟缓存
                    byte[] dummyBuffer = new byte[512];
                    // 创建一个加密随机数目生成器
                    RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
                    // 打开这个文件的FileStream
                    FileStream inputStream = new FileStream(filename, FileMode.Open, FileAccess.Write, FileShare.ReadWrite);
                    for (int currentPass = 0; currentPass < timesToWrite; currentPass++)
                    {
                        // 文件流位置
                        inputStream.Position = 0;
                        //循环所有的扇区
                        for (int sectorsWritten = 0; sectorsWritten < sectors; sectorsWritten++)
                        {
                            //把垃圾数据填充到流中
                            rng.GetBytes(dummyBuffer);
                            // 写入文件流中
                            inputStream.Write(dummyBuffer, 0, dummyBuffer.Length);
                        }
                    }
                    // 清空文件
                    inputStream.SetLength(0);
                    // 关闭文件流
                    inputStream.Close();
                    // 清空原始日期需要
                    DateTime dt = new DateTime(2037, 1, 1, 0, 0, 0);
                    File.SetCreationTime(filename, dt);
                    File.SetLastAccessTime(filename, dt);
                    File.SetLastWriteTime(filename, dt);
                    // 删除文件
                    File.Delete(filename);
                }
            }
            catch (Exception)
            {
            }
        }
    }
}
